#ifndef __STACK_H__
#define __STACK_H__

typedef struct stack {
    // 堆栈的大小（堆栈中当前元素个数）
    unsigned size;
    // 栈顶指针
    int top; 
    int data[0];
} stack;

/**
 * 创建一个指定容量的堆栈
 * @param capacity 堆栈的容量
 * @return 创建好的堆栈的指针
 */
stack* create_stack(unsigned capicity);

/**
 * 入栈
 * @param s 堆栈指针
 * @param val 要添加到堆栈中的参数
 */
int push(stack* s, int val);

/**
 * 弹栈
 * @param s 堆栈指针
 * @return 返回当前栈顶的元素
 */
int pop(stack* s);

/**
 * 释放堆栈
 */
void release_stack(stack* s);

#endif